/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package fr.unice.managedbeans;

import fr.unice.miage.entities.CompteBanquaire;
import fr.unice.miage.entities.OperationBanquaire;
import fr.unice.miage.enumeration.TypeOperation;
import fr.unice.miage.sessions.GestionnaireDeCompteBancaire;
import fr.unice.miage.sessions.GestionnaireOperation;
import javax.ejb.EJB;
import javax.inject.Named;
import javax.enterprise.context.SessionScoped;
import java.io.Serializable;
import java.util.Collection;
import javax.inject.Inject;

/**
 *
 * @author Jeremy Romano
 */
@Named(value = "comptesMBean")
@SessionScoped
public class ComptesMBean implements Serializable {
    @EJB
    private GestionnaireOperation gestionnaireOperation;
    
    @EJB
    private GestionnaireDeCompteBancaire gestionnaireDeCompteBancaire;
        
    @Inject
    private UtilisateursMBean utilisateursMBean;
    
    private float montant;
    private long idCompteDebiteur;
    private long idCompteCrediteur;
    
    private Collection<CompteBanquaire> comptes;
    
    private CompteBanquaire selectedCompte;

    public Collection<OperationBanquaire> getOperations() {
        if(selectedCompte instanceof CompteBanquaire)
        {
            CompteBanquaire cb = gestionnaireDeCompteBancaire.getCompte(selectedCompte.getId());
            return cb.getOperations();
        }
        else
        {
            return null;
        }
    }

    public CompteBanquaire getSelectedCompte() {
        return selectedCompte;
    }

    public void setSelectedCompte(CompteBanquaire selectedCompte) {
        System.out.println("Compte selected = "+selectedCompte.getTitre());
        this.selectedCompte = selectedCompte;
    }

    public Collection<CompteBanquaire> getComptes() {
        this.comptes = gestionnaireDeCompteBancaire.getComptes(utilisateursMBean.getCurrent().getId());
        return comptes;
    }

    public long getIdCompteDebiteur() {
        return idCompteDebiteur;
    }
    
    public long getIdCompteCrediteur() {
        return idCompteCrediteur;
    }

    public void setIdCompteDebiteur(long idCompteDebiteur) {
        this.idCompteDebiteur = idCompteDebiteur;
    }
    
    public void setIdCompteCrediteur(long idCompteCrediteur) {
        this.idCompteCrediteur = idCompteCrediteur;
    }

    public float getMontant() {
        return montant;
    }

    public void setMontant(float montant) {
        this.montant = montant;
    }
    
    public String depot()
    {
        CompteBanquaire cb = gestionnaireDeCompteBancaire.faireDepot(this.idCompteCrediteur, this.montant);
        
        OperationBanquaire ob = gestionnaireOperation.creerOperation(cb, this.montant, TypeOperation.DEPOT);
        gestionnaireDeCompteBancaire.addOperation(cb,ob);
        
        this.montant = 0;
        this.idCompteCrediteur = 0;
        return "success";
    }
    
    public String retrait()
    {
        CompteBanquaire cb = gestionnaireDeCompteBancaire.faireRetrait(this.idCompteDebiteur, this.montant);
       
        OperationBanquaire ob = gestionnaireOperation.creerOperation(cb, this.montant, TypeOperation.RETRAIT);
        gestionnaireDeCompteBancaire.addOperation(cb,ob);
        
        this.montant = 0;
        this.idCompteDebiteur = 0;
        return "success";
    }
    
    public String virement()
    {
        CompteBanquaire[] cbs = gestionnaireDeCompteBancaire.faireVirement(this.idCompteDebiteur, this.idCompteCrediteur, this.montant);
       
        OperationBanquaire ob = gestionnaireOperation.creerOperation(cbs[0], cbs[1], this.montant, TypeOperation.VIREMENT);
        
        gestionnaireDeCompteBancaire.addOperation(cbs[0],ob);
        gestionnaireDeCompteBancaire.addOperation(cbs[1],ob);
        
        this.montant = 0;
        this.idCompteDebiteur = 0;
        this.idCompteCrediteur = 0;
        
        return "success";
    }
}
